@rubytech/create-realagent 1.0.704 → 1.0.705
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/uninstall.js +24 -15
- package/package.json +1 -1
- package/payload/platform/neo4j/edge-annotations.json +134 -0
- package/payload/server/chunk-LQ5GSMEW.js +12036 -0
- package/payload/server/maxy-edge.js +1 -1
- package/payload/server/public/assets/{Checkbox-CDUmQ1Bu.js → Checkbox-B2Lk8F4X.js} +1 -1
- package/payload/server/public/assets/{admin-picYWZfn.js → admin-agtgi48Q.js} +30 -30
- package/payload/server/public/assets/{data-yYbcrFrc.js → data-B7nsyBTV.js} +1 -1
- package/payload/server/public/assets/{file-CzLc4Rvq.js → file-DHWTu8LP.js} +1 -1
- package/payload/server/public/assets/{graph-BRzC0ZtS.js → graph-ChDwqqhJ.js} +1 -1
- package/payload/server/public/assets/{house-lM4gLKkH.js → house-CfjnRPO6.js} +1 -1
- package/payload/server/public/assets/jsx-runtime-81wg0w0Q.css +1 -0
- package/payload/server/public/assets/{public-scZadgzt.js → public-CE1kyVnz.js} +1 -1
- package/payload/server/public/assets/{share-2-CNdrRWue.js → share-2-CAd1beVT.js} +1 -1
- package/payload/server/public/assets/{useVoiceRecorder-D2kfoqVB.js → useVoiceRecorder-LSAU68Eo.js} +1 -1
- package/payload/server/public/assets/{x-CsDhB6Vr.js → x-B0xK3Aoq.js} +1 -1
- package/payload/server/public/data.html +6 -6
- package/payload/server/public/graph.html +7 -7
- package/payload/server/public/index.html +8 -8
- package/payload/server/public/public.html +5 -5
- package/payload/server/server.js +114 -54
- package/payload/server/public/assets/jsx-runtime-I6ZqIGn8.css +0 -1
- /package/payload/server/public/assets/{jsx-runtime-BK2hplUC.js → jsx-runtime-DhzH26q8.js} +0 -0
package/dist/uninstall.js
CHANGED
|
@@ -79,32 +79,40 @@ function commandExists(cmd) {
|
|
|
79
79
|
export function isMaxyInstalled() {
|
|
80
80
|
return existsSync(INSTALL_DIR);
|
|
81
81
|
}
|
|
82
|
+
/** Known brand hostnames in the Maxy ecosystem. Each brand ships a main unit
|
|
83
|
+
* (`<hostname>.service`) and a per-brand edge unit (`<hostname>-edge.service`,
|
|
84
|
+
* Task 662). Peer detection matches only these filenames, not any stray
|
|
85
|
+
* `.service` file — stale units, gnome-keyring disable markers, and unrelated
|
|
86
|
+
* user services are not peer evidence (Task 683). When a third brand is
|
|
87
|
+
* added under `brands/`, append its hostname here. */
|
|
88
|
+
const KNOWN_BRAND_HOSTNAMES = ["maxy", "realagent"];
|
|
82
89
|
/** Detect whether another brand is installed on this device.
|
|
83
90
|
* Task 659: device-wide steps (apt package purge, Ollama binary removal, apt
|
|
84
91
|
* repo cleanup, ~/.claude / ~/.ollama wipes) must skip when a peer brand is
|
|
85
92
|
* present — its runtime still depends on those singletons.
|
|
86
93
|
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
* must not register as peer evidence). Task 664 retired the per-brand
|
|
91
|
-
* ttyd unit, so it no longer needs an exclusion.
|
|
94
|
+
* Returns the matched peer service filename (so callers can cite it in logs)
|
|
95
|
+
* or `undefined` when no peer brand is detected. Truthiness maps cleanly to
|
|
96
|
+
* "peer present" for existing `if (peerBrandPresent())` callers.
|
|
92
97
|
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
+
* Task 683: narrowed from "any `.service` file that isn't ours" to an
|
|
99
|
+
* allowlist keyed on `KNOWN_BRAND_HOSTNAMES`. The previous rule counted
|
|
100
|
+
* a `gnome-keyring-daemon.service -> /dev/null` disable-marker symlink (and
|
|
101
|
+
* any other unrelated user unit) as peer evidence, silently preserving
|
|
102
|
+
* `~/.claude` OAuth state on single-brand re-installs. */
|
|
98
103
|
function peerBrandPresent() {
|
|
99
104
|
const systemdUserDir = resolve(HOME, ".config/systemd/user");
|
|
100
105
|
if (!existsSync(systemdUserDir))
|
|
101
|
-
return
|
|
102
|
-
const
|
|
106
|
+
return undefined;
|
|
107
|
+
const peerUnits = KNOWN_BRAND_HOSTNAMES
|
|
108
|
+
.filter((h) => h !== BRAND.hostname)
|
|
109
|
+
.flatMap((h) => [`${h}.service`, `${h}-edge.service`]);
|
|
103
110
|
try {
|
|
104
|
-
|
|
111
|
+
const files = new Set(readdirSync(systemdUserDir));
|
|
112
|
+
return peerUnits.find((unit) => files.has(unit));
|
|
105
113
|
}
|
|
106
114
|
catch {
|
|
107
|
-
return
|
|
115
|
+
return undefined;
|
|
108
116
|
}
|
|
109
117
|
}
|
|
110
118
|
// ---------------------------------------------------------------------------
|
|
@@ -380,7 +388,8 @@ function removeAppDirs() {
|
|
|
380
388
|
]),
|
|
381
389
|
];
|
|
382
390
|
if (peer) {
|
|
383
|
-
console.log(
|
|
391
|
+
console.log(` Preserved ~/.claude (peer: ${peer})`);
|
|
392
|
+
console.log(` Preserved ~/.ollama (peer: ${peer})`);
|
|
384
393
|
}
|
|
385
394
|
for (const { path, label } of dirs) {
|
|
386
395
|
if (existsSync(path)) {
|
package/package.json
CHANGED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
{
|
|
2
|
+
"edges": {
|
|
3
|
+
"PART_OF": {
|
|
4
|
+
"direction": "(Message)-[:PART_OF]->(Conversation)",
|
|
5
|
+
"note": "Messages belong to exactly one Conversation. Do NOT use :HAS_MESSAGE — that edge does not exist."
|
|
6
|
+
},
|
|
7
|
+
"NEXT": {
|
|
8
|
+
"direction": "(Message)-[:NEXT]->(Message)",
|
|
9
|
+
"note": "Chain order within a Conversation. Each Message has at most one NEXT successor."
|
|
10
|
+
},
|
|
11
|
+
"ADMIN_OF": {
|
|
12
|
+
"direction": "(AdminUser)-[:ADMIN_OF]->(LocalBusiness)",
|
|
13
|
+
"note": "Device-level admin membership (see admin-add / admin-remove)."
|
|
14
|
+
},
|
|
15
|
+
"HAS_PROFILE": {
|
|
16
|
+
"direction": "(AdminUser)-[:HAS_PROFILE]->(UserProfile)",
|
|
17
|
+
"note": "Admin's profile node. Account scope lives on the `accountId` property of each node — do NOT add a redundant edge to LocalBusiness just to satisfy the write doctrine. Every MATCH filters by `{accountId: $accountId}`."
|
|
18
|
+
},
|
|
19
|
+
"AUTHORED_BY": {
|
|
20
|
+
"direction": "(Message)-[:AUTHORED_BY]->(Person)",
|
|
21
|
+
"note": "Message authorship (when the author is an identified Person)."
|
|
22
|
+
},
|
|
23
|
+
"HAS_TOOL_CALL": {
|
|
24
|
+
"direction": "(Message)-[:HAS_TOOL_CALL]->(ToolCall)",
|
|
25
|
+
"note": "Tool calls attached to an assistant message."
|
|
26
|
+
},
|
|
27
|
+
"HAS_RESULT": {
|
|
28
|
+
"direction": "(WorkflowStep|ToolCall)-[:HAS_RESULT]->(StepResult)",
|
|
29
|
+
"note": "Workflow step / tool-call outputs."
|
|
30
|
+
},
|
|
31
|
+
"HAS_STEP": {
|
|
32
|
+
"direction": "(Workflow)-[:HAS_STEP]->(WorkflowStep)",
|
|
33
|
+
"note": "Workflow composition."
|
|
34
|
+
},
|
|
35
|
+
"RUN_OF": {
|
|
36
|
+
"direction": "(WorkflowRun)-[:RUN_OF]->(Workflow)",
|
|
37
|
+
"note": "Workflow execution instance."
|
|
38
|
+
},
|
|
39
|
+
"HAS_SECTION": {
|
|
40
|
+
"direction": "(KnowledgeDocument)-[:HAS_SECTION]->(Section)",
|
|
41
|
+
"note": "Document hierarchy."
|
|
42
|
+
},
|
|
43
|
+
"HAS_CHUNK": {
|
|
44
|
+
"direction": "(Section)-[:HAS_CHUNK]->(Chunk)",
|
|
45
|
+
"note": "Section-to-embeddable-chunk."
|
|
46
|
+
},
|
|
47
|
+
"HAS_PREFERENCE": {
|
|
48
|
+
"direction": "(Person)-[:HAS_PREFERENCE]->(Preference)",
|
|
49
|
+
"note": "Person-scoped preferences (profile memory)."
|
|
50
|
+
},
|
|
51
|
+
"HAS_ACCESS": {
|
|
52
|
+
"direction": "(Person)-[:HAS_ACCESS]->(AccessGrant)",
|
|
53
|
+
"note": "Public agent access grants."
|
|
54
|
+
},
|
|
55
|
+
"HAS_TASK": {
|
|
56
|
+
"direction": "(Person|LocalBusiness)-[:HAS_TASK]->(Task)",
|
|
57
|
+
"note": "Task ownership / assignment."
|
|
58
|
+
},
|
|
59
|
+
"HAS_PRICING": {
|
|
60
|
+
"direction": "(Service)-[:HAS_PRICING]->(PriceSpecification)",
|
|
61
|
+
"note": "Service pricing."
|
|
62
|
+
},
|
|
63
|
+
"HAS_HOURS": {
|
|
64
|
+
"direction": "(LocalBusiness)-[:HAS_HOURS]->(OpeningHoursSpecification)",
|
|
65
|
+
"note": "Opening hours."
|
|
66
|
+
},
|
|
67
|
+
"HAS_FAQ": {
|
|
68
|
+
"direction": "(LocalBusiness)-[:HAS_FAQ]->(Question)",
|
|
69
|
+
"note": "FAQ attached to business."
|
|
70
|
+
},
|
|
71
|
+
"HAS_BRAND_ASSET": {
|
|
72
|
+
"direction": "(LocalBusiness)-[:HAS_BRAND_ASSET]->(DigitalDocument|ImageObject)",
|
|
73
|
+
"note": "Branding assets."
|
|
74
|
+
},
|
|
75
|
+
"OFFERS": {
|
|
76
|
+
"direction": "(LocalBusiness)-[:OFFERS]->(Service)",
|
|
77
|
+
"note": "Service catalogue."
|
|
78
|
+
},
|
|
79
|
+
"CONTAINS": {
|
|
80
|
+
"direction": "(KnowledgeDocument)-[:CONTAINS]->(Chunk)",
|
|
81
|
+
"note": "Flat document-to-chunk (alternative to HAS_SECTION then HAS_CHUNK)."
|
|
82
|
+
},
|
|
83
|
+
"REFERENCES": {
|
|
84
|
+
"direction": "(Message|KnowledgeDocument)-[:REFERENCES]->(*)",
|
|
85
|
+
"note": "Soft reference link."
|
|
86
|
+
},
|
|
87
|
+
"ABOUT": {
|
|
88
|
+
"direction": "(Review|Message)-[:ABOUT]->(*)",
|
|
89
|
+
"note": "Subject pointer."
|
|
90
|
+
},
|
|
91
|
+
"REPLY_TO": {
|
|
92
|
+
"direction": "(Email)-[:REPLY_TO]->(Email)",
|
|
93
|
+
"note": "Email threading."
|
|
94
|
+
},
|
|
95
|
+
"RECEIVED_BY": {
|
|
96
|
+
"direction": "(Email)-[:RECEIVED_BY]->(Person)",
|
|
97
|
+
"note": "Email recipient."
|
|
98
|
+
},
|
|
99
|
+
"RAISED_BY": {
|
|
100
|
+
"direction": "(ReviewAlert)-[:RAISED_BY]->(*)",
|
|
101
|
+
"note": "Alert provenance."
|
|
102
|
+
},
|
|
103
|
+
"AFFECTS": {
|
|
104
|
+
"direction": "(ReviewAlert)-[:AFFECTS]->(*)",
|
|
105
|
+
"note": "Alert impact surface."
|
|
106
|
+
},
|
|
107
|
+
"BLOCKS": {
|
|
108
|
+
"direction": "(Task)-[:BLOCKS]->(Task)",
|
|
109
|
+
"note": "Task dependency."
|
|
110
|
+
},
|
|
111
|
+
"OBSERVED_IN": {
|
|
112
|
+
"direction": "(*)-[:OBSERVED_IN]->(Conversation)",
|
|
113
|
+
"note": "Observation provenance."
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
"sublabels": {
|
|
117
|
+
"AdminConversation": {
|
|
118
|
+
"base": "Conversation",
|
|
119
|
+
"note": "Admin-only conversation (admin chat, not public)."
|
|
120
|
+
},
|
|
121
|
+
"PublicConversation": {
|
|
122
|
+
"base": "Conversation",
|
|
123
|
+
"note": "Public agent conversation (visitor-facing)."
|
|
124
|
+
},
|
|
125
|
+
"UserMessage": {
|
|
126
|
+
"base": "Message",
|
|
127
|
+
"note": "Message authored by the human user."
|
|
128
|
+
},
|
|
129
|
+
"AssistantMessage": {
|
|
130
|
+
"base": "Message",
|
|
131
|
+
"note": "Message authored by the assistant."
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|